package com.glink.manage.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.glink.common.exception.GeneralSimpleException;
import com.glink.manage.domain.ConstructionWorkSiteBean;
import com.glink.manage.dto.constructionwork.*;
import com.glink.manage.vo.constructionwork.*;
import com.glink.manage.vo.participatingunit.ParticipatingUnitListVO;
import com.glink.manage.vo.participatingunit.ParticipatingUnitSimpleDetailInfoVO;
import com.glink.manage.vo.person.PersonSimplePhoneInfoVO;
import com.glink.manage.vo.view.SiteWeatherVO;

import java.util.List;

/**
 * @author  qiushaoshan
 * @since  2025-01-08
 */
public interface ConstructionWorkSiteService extends IService<ConstructionWorkSiteBean> {

    /**
     * 根据施工工程ID查询工程现场个数
     * @param constructionWorkObjId 施工工程ID
     * @return 数量
     */
    Integer countByConstructionWorkObjId(String constructionWorkObjId);

    /**
     * 分页查询工程现场
     * @param dto 查询信息
     * @return 工程现场
     */
    IPage<ConstructionWorkSitePageVO> findSiteByPage(ConstructionWorkSitePageDTO dto);

    /**
     * 保存工程现场
     * @param dto 保存信息
     * @return 保存状态
     */
    String saveSite(ConstructionWorkSiteSaveDTO dto);

    /**
     * 移除工程现场
     * @param dto 工程现场ID
     * @return 移除状态
     */
    Boolean delSite(ConstructionWorkSiteIdDTO dto);

    /**
     * 根据用户所属单位查询参建单位
     * @param orgId 单位ID
     * @return 参建单位
     */
    List<ParticipatingUnitListVO> findUnitByWorkAndOrgId(String orgId) throws GeneralSimpleException;


    /**
     * 根据工程id查询施工现场列表
     * @param workObjId 工程ID
     * @return 工程现场
     */
    List<ConstructionWorkSiteListVO> findWorkSiteListByWorkId(String workObjId);

    /**
     * 根据施工现场ID查询施工现场名称
     * @param constructionWorkSiteObjId 施工现场ID
     * @return 施工现场名称
     */
    String findNameByObjId(String constructionWorkSiteObjId);

    /**
     * 场站新名称--主要用于处理未授权场站名称
     * @param constructionWorkSiteBean 场站对象
     * @return 场站新名称
     */
    String getNewSiteName(ConstructionWorkSiteBean constructionWorkSiteBean);
    
    /**
     * 根据施工现场ID查询负责人ID
     * @param constructionWorkSiteObjId 施工现场ID
     * @return 负责人
     */
    String findSuperintendentByObjId(String constructionWorkSiteObjId);

    /**
     * 根据施工现场ID查询工程ID
     * @param constructionWorkSiteObjId 施工现场ID
     * @return 工程ID
     */
    String findWorkIdByObjId(String constructionWorkSiteObjId);

    /**
     * 根据地名查询地市信息
     * @param dto 查询条件
     * @return 地市信息
     */
    List<ConstructionWorkSitePlaceNameVO> findPlaceName(ConstructionWorkSitePlaceNameDTO dto);

    /**
     * 查询施工现场信息
     * @param dto 施工现场ID
     * @return 施工现场信息
     */
    ConstructionWorkSiteInfoVO findSite(ConstructionWorkSiteIdDTO dto);

    /**
     * 更新施工现场
     * @param dto 施工现场信息
     * @return 更新状态
     */
    Boolean updateSite(ConstructionWorkSiteUpdateDTO dto);

    /**
     * 查询天气
     * @param constructionWorkSiteObjId 施工现场ID
     * @return 天气信息
     */
    SiteWeatherVO queryWeatherBySiteId(String constructionWorkSiteObjId);

    /**
     * 根据工程ID查询施工现场
     * @param workIds 工程ID
     * @return 施工现场
     */
    List<ConstructionWorkSiteBean> findByWorkIdIn(List<String> workIds);

    /**
     * 获取施工现场机器码
     * @param dto 查询条件
     * @return 机器码
     */
    ConstructionWorkSiteGrantVO findSiteMachineCode(ConstructionWorkSiteIdDTO dto) throws GeneralSimpleException;

    /**
     * 授权施工现场
     * @param dto 授权信息
     * @return 授权状态
     */
    Boolean grantSite(ConstructionWorkSiteGrantDTO dto) throws GeneralSimpleException;


    /**
     * 根据参建单位ID获取参建单位下的人员信息列表
     * @param dto 参建单位ID
     * @return 参建单位下的人员信息列表
     */
    List<PersonSimplePhoneInfoVO> findPersonManageInfoByUnitId(ConstructionWorkUnitIdDTO dto) throws GeneralSimpleException;

    /**
     * 根据施工工程-参建单位关联ID获取详细关联信息
     * @param dto 施工工程-参建单位关联ID
     * @return 详细关联信息
     */
    ParticipatingUnitSimpleDetailInfoVO findWorkUnitRealDetailInfoByUnitRealId(ConstructionWorkUnitRealIdDTO dto) ;


    /**
     * 校验场站授权
     */
    void checkSiteAuthorize();

    /**
     * 校验场站授权
     * @param constructionWorkSiteObjId 场站ID
     */
    void checkGrantByObjId(String constructionWorkSiteObjId) throws GeneralSimpleException;

    /**
     * 根据施工现场ID查询授权的场站
     * @param workSiteIdList 现场ID
     * @return 授权的现场
     */
    List<String> findGrantSiteByObjIdIn(List<String> workSiteIdList);

    /**
     * 根据工程ID查询施工现场ID
     * @param workIdList 工程ID
     * @return 施工现场ID
     */
    List<String> findGrantSiteByWorkIdIn(List<String> workIdList);
}
